package org.example.inventory.config;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Druid连接池配置工具类
 */
public class DruidConfig {
    //静态数据源实例
    private static DataSource dataSource;
    //静态代码块初始化连接池
    static {
        try {
            //1、加载配置文件
            InputStream is = DruidConfig.class.getClassLoader()
                    .getResourceAsStream("druid.properties");
            //2．读取配置参数
            Properties props = new Properties();
            props.load(is);
            //3．创建连接池
            dataSource = DruidDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            throw new ExceptionInInitializerError("Druid连接池初始化失败：" + e.getMessage());
        }
    }
    /**
    *获取数据源实例（供其他需要DataSource的场景使用）
    */
    public static DataSource getDataSource() { return dataSource;}
    /**
    *获取数据库连接
    */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
    /**
    * 关闭连接（实际是将连接返回连接池）
    */
    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                System.err.println("关闭数据库连接时发生异常：" + e.getMessage());
            }
        }
    }
    /**
    * 连接测试方法
    */
    private static void testConnection() {
        try (Connection conn = dataSource.getConnection()){
            System.out.println("数据库连接测试成功数据库版本："
                    + conn.getMetaData().getDatabaseProductVersion());
        } catch (SQLException e) {

        }
    }
}